import 'dart:math';

import 'package:flutter/material.dart';
import 'package:my_app/common/common.dart';
import 'package:my_app/global/global.dart';
import 'package:my_app/qr_list/qr_list.dart';
import 'package:my_app/service/api/api.dart';

class SingleGoods extends StatefulWidget {
  SingleGoods({Key? key, this.goodsCode}) : super(key: key);
  final String? goodsCode;
  @override
  State<SingleGoods> createState() =>
      _SingleGoodsState(goodsCode: this.goodsCode);
}

class _SingleGoodsState extends State<SingleGoods> {
  final String? goodsCode;
  _SingleGoodsState({this.goodsCode});
  double paddingLeft = 45.0;
  double itemWidth = 140.0;
  // button 文字样式
  TextStyle _buttonTextStyle = TextStyle(
    fontSize: 10.0,
    color: Colors.white,
  );
  // button 样式
  ButtonStyle _buttonStyle = TextButton.styleFrom(
    backgroundColor: Color(Common.muji),
    padding: EdgeInsets.all(5),
  );
  // listView 滚动
  ScrollController _scrollController = ScrollController();
  // ifsn
  late String iFsn;
  // 是否检查空白异常
  bool isCheckVoid = false;

  // 二维码聚焦
  bool qrAutofocus = true;
  // 商品条码聚焦
  bool goodsAutofocus = false;
  // 扫描获得的qr码
  String scanQrData = "";
  // 扫描获得的商品码
  String scanGoodsData = "";

  double listBodySize = 14; // 列表内容大小
  TextStyle listHadeSize = TextStyle(fontSize: 16); // 列表头部大小
  double listLineHeight = 40; // 列表行高
  TextEditingController _qrcontroller = new TextEditingController();

  @override
  initState() {
    // print(title)
    getIfsn();
    // alertDialog("123");
    super.initState();
    // Map userinfo = {"userName":"张三","age":20};
  }

  double getWidth() {
    MediaQueryData mq;
    mq = MediaQuery.of(context);
    // 设备宽度
    double deviceWidth = mq.size.width;
    double width = 210; // 列表内容大小
    if (deviceWidth > 360) {
      width = 210;
    } else {
      width = 133;
    }
    return width;
  }

  double getfontSize() {
    MediaQueryData mq;
    mq = MediaQuery.of(context);
    // 设备宽度
    double deviceWidth = mq.size.width;
    double fontSize = 11; // 列表内容大小
    if (deviceWidth > 360) {
      fontSize = 12;
    } else {
      fontSize = 10;
    }
    return fontSize;
  }

  @override
  didChangeDependencies() {
    print('did change dependencies');

    super.didChangeDependencies();
  }

  // @override
  // didUpdateWidget(TestStatefulWidget oldWidget) {
  //   print('did update widget');
  //   super.didUpdateWidget(oldWidget);
  // }
  @override
  deactivate() {
    print('deactivate');
    super.deactivate();
  }

  @override
  dispose() {
    print('dispose');
    super.dispose();
  }

  @override
  reassemble() {
    print('reassemble');
    super.reassemble();
  }

  // list 滚动到底部
  void scroollBottom() {
    Future.delayed(Duration(milliseconds: 500), () {
      _scrollController.jumpTo(_scrollController.position.maxScrollExtent);
    });
  }

  // 获取ifsn
  void getIfsn() async {
    var data = await ApiService.getIfsnData();
    iFsn = data;
    print("______________________________");
    print(iFsn);
    print(GlobalData.staffName);
  }

  List<Map> listData = [];

  // 渲染list widget
  List<Widget> _getListData() {
    List<Widget> listdd = [];

    for (var i = 0; i < this.listData.length; i++) {
      listdd.add(
        Container(
          height: listLineHeight,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Expanded(
                flex: 1,
                child: Checkbox(
                  value: this.listData[i]["isChecked"],
                  onChanged: (value) {
                    setState(() {
                      this.listData[i]["isChecked"] = value;
                    });
                  },
                ),
              ),
              Expanded(
                flex: 6,
                child: Container(
                  decoration: BoxDecoration(
                    border: Border(
                      bottom: BorderSide(width: 0.3, color: Colors.black),
                    ),
                  ),
                  width: itemWidth,
                  child: Row(
                    children: [
                      Text(
                        (i + 1).toString() + ":",
                      ),
                      SizedBox(width: 5),
                      Text(
                        this.listData[i]["qrCode"],
                        style: TextStyle(
                          fontSize: getfontSize(),
                          color: this.listData[i]["color"],
                        ),
                      ),
                    ],
                  ),
                ),
              ),

              Expanded(
                flex: 4,
                child: Container(
                  decoration: BoxDecoration(
                    border: Border(
                      bottom: BorderSide(width: 0.3, color: Colors.black),
                    ),
                  ),
                  width: itemWidth,
                  child: Row(
                    children: [
                      Text(
                        "",
                      ),
                      Text(
                        this.listData[i]["goodsCode"],
                        style: TextStyle(
                          fontSize: getfontSize(),
                          color: this.listData[i]["color"],
                        ),
                      ),
                    ],
                  ),
                ),
              ),
              SizedBox(width: 10),
              // Text("______"),
              // Text(this.listData[i]["goodsCode"]),
            ],
          ),
        ),
      );
      if (this.listData.length - 1 == i) {
        listdd.add(
          Container(
            height: 30,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Expanded(
                  flex: 1,
                  child: Checkbox(
                    value: false,
                    onChanged: (value) {},
                  ),
                ),
                Expanded(
                  flex: 6,
                  child: Container(
                    child: Container(
                      decoration: BoxDecoration(
                        border: Border(
                          bottom: BorderSide(width: 0.3, color: Colors.black),
                        ),
                      ),
                      height: 20,
                      width: 175,
                      child: TextField(
                        onChanged: (value) {
                          print(value);
                        },
                        autofocus: true,
                        keyboardType: TextInputType.emailAddress,
                        controller: _qrcontroller,
                        onSubmitted: (value) async {
                          // 保存qr码
                          // Uri u = Uri.parse(value);
                          // value = u.queryParameters['qrCode'].toString();
                          if (value.indexOf("=") > -1) {
                            value = value.split("=")[1];
                          }
                          _qrcontroller.text = value;
                          Color colors = Colors.black;
                          bool err = false;
                          if (value.length > 2) {
                            if (value.substring(0, 2) != "QR") {
                              colors = Colors.red;
                              err = true;
                            }
                          } else {
                            colors = Colors.red;
                            err = true;
                          }
                          var data = await ApiService.checkGoodsData(
                              iFsn,
                              value,
                              value,
                              goodsCode!,
                              GlobalData.staffID,
                              DateTime.now().toString().substring(0, 19),
                              (i + 2).toString());

                          if (data.indexOf("-1") > -1) {
                            err = true;
                            colors = Colors.red;
                            Common.showTost(
                                data, Colors.black, Colors.white, 10);
                          }
                          var item = {
                            "qrCode": value,
                            "goodsCode": goodsCode,
                            "isChecked": false,
                            "color": colors,
                            "error": err
                          };
                          // 保存qr码
                          setState(() {
                            listData.add(item);
                          });
                          // checkData(
                          //     value, value, goodsCode!, (i + 1).toString());
                          _qrcontroller.text = "";
                          scroollBottom();
                        },
                        // readOnly: true,
                        // showCursor: true,
                        // style: TextStyle(fontSize: 10),
                        decoration: InputDecoration(
                          focusedBorder: Common.focusedBorder,
                          // border: OutlineInputBorder(
                          // borderSide: BorderSide(123
                          //     color: Colors.black, width: 2.0),
                          //    ),
                        ),
                      ),
                    ),
                  ),
                ),
                Expanded(
                  flex: 4,
                  child: Container(
                    child: Container(
                      decoration: BoxDecoration(
                        border: Border(
                          bottom: BorderSide(width: 0.3, color: Colors.black),
                        ),
                      ),
                      height: 20,
                      child: Text(goodsCode!),
                    ),
                  ),
                ),
                SizedBox(width: 10),
                // Text("______"),
                // Text(this.listData[i]["goodsCode"]),
              ],
            ),
          ),
        );
      }
    }
    if (this.listData.length == 0) {
      listdd.add(
        Container(
          height: 30,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Expanded(
                flex: 1,
                child: Checkbox(
                  value: false,
                  onChanged: (value) {},
                ),
              ),
              Expanded(
                flex: 6,
                child: Container(
                  child: Container(
                    decoration: BoxDecoration(
                      border: Border(
                        bottom: BorderSide(width: 0.3, color: Colors.black),
                      ),
                    ),
                    height: 20,
                    width: 175,
                    child: TextField(
                      onChanged: (value) {},
                      onEditingComplete: () {},
                      // focusNode: _qrfocusNode,
                      autofocus: true,
                      keyboardType: TextInputType.emailAddress,
                      controller: _qrcontroller,
                      onSubmitted: (value) async {
                        // Uri u = Uri.parse(value);
                        // value = u.queryParameters['qrCode'].toString();
                        if (value.indexOf("=") > -1) {
                          value = value.split("=")[1];
                        }
                        _qrcontroller.text = value;
                        Color colors = Colors.black;
                        bool err = false;
                        if (value.length > 2) {
                          if (value.substring(0, 2) != "QR") {
                            colors = Colors.red;
                            err = true;
                          }
                        } else {
                          colors = Colors.red;
                          err = true;
                        }
                        var data = await ApiService.checkGoodsData(
                            iFsn,
                            value,
                            value,
                            goodsCode!,
                            GlobalData.staffID,
                            DateTime.now().toString().substring(0, 19),
                            "1");

                        if (data.indexOf("-1") > -1) {
                          err = true;
                          colors = Colors.red;
                          Common.showTost(data, Colors.black, Colors.white, 10);
                        }

                        var item = {
                          "qrCode": value,
                          "goodsCode": goodsCode,
                          "isChecked": false,
                          "color": colors,
                          "error": err
                        };
                        // 保存qr码
                        setState(() {
                          listData.add(item);
                        });
                        // checkData(value, value, goodsCode!, "1");
                        _qrcontroller.text = "";
                      },
                      decoration: InputDecoration(
                        focusedBorder: Common.focusedBorder,
                        //border: OutlineInputBorder(
                        // borderSide: BorderSide(123
                        //     color: Colors.black, width: 2.0),
                        //  ),
                      ),
                    ),
                  ),
                ),
              ),
              Expanded(
                flex: 4,
                child: Container(
                  child: Container(
                    decoration: BoxDecoration(
                      border: Border(
                        bottom: BorderSide(width: 0.3, color: Colors.black),
                      ),
                    ),
                    height: 20,
                    child: Text(goodsCode!),
                  ),
                ),
              ),
            ],
          ),
        ),
      );
    }
    return listdd;
  }

  // 删除List 数据
  void delData() {
    for (var i = 0; i < listData.length; i++) {
      if (listData[i]["isChecked"] == true) {
        ApiService.delGoodsData(
            '$iFsn',
            '${listData[i]['qrCode']}',
            '${listData[i]['qrCode']}',
            '${listData[i]['goodsCode']}',
            '${GlobalData.staffID}',
            '${DateTime.now().toString().substring(0, 19)}',
            '${i + 1}');
        listData.remove(listData[i]);
        delData();
        return;
      }
    }
    setState(() {
      listData = listData;
    });
    // print("______toset________");
    // print(listData.toSet());
    // print("______tost end________");
  }

  // 选中或取消全部数据
  void allDataChange(bool? checked) {
    for (var i = 0; i < listData.length; i++) {
      listData[i]["isChecked"] = checked;
    }
    setState(() {
      listData = listData;
    });
  }

  // // 检查空白异常
  // void checkData() async {
  //   List nullData = []; // 空白数据
  //   List repeatData = []; // 重复数据
  //   for (var i = 0; i < listData.length; i++) {
  //     if (listData[i]["error"]) {
  //       repeatData.add(listData[i]);
  //     }
  //   }
  //   print(listData);
  //   if (repeatData.length > 0 || nullData.length > 0) {
  //     Common.showTost("错误数据${repeatData.length}条,空白数据${nullData.length}条");
  //   } else {
  //     // var data = await ApiService.checkGoodsData(
  //     //     iFsn,
  //     //     "QR1123581000022022400250000000040",
  //     //     "4550344568927",
  //     //     GlobalData.staff_name,
  //     //     DateTime.now().toString().substring(0, 19),
  //     //     "1");
  //     checkAllData();
  //   }
  // }
  // 检查单个数据
  void checkData(String qr, String qrEnd, String goods, String num) async {
    var data = await ApiService.checkGoodsData(iFsn, qr, qrEnd, goods,
        GlobalData.staffID, DateTime.now().toString().substring(0, 19), num);
    Common.showTost(data);
  }

  // 检查所有数据
  void checkAllData() async {
    String sql = "";
    for (var i = 0; i < listData.length; i++) {
      sql +=
          "MAPS_FUNC_QR_CODE_INPUT('$iFsn','${listData[i]['qrCode']}','${listData[i]['qrCode']}', '${listData[i]['goodsCode']}', '${GlobalData.staffID}', '${DateTime.now().toString().substring(0, 19)}', '${i + 1}', '1');";
    }
    await ApiService.checkAllGoodsData(sql);
    var data = await ApiService.checkQrData(iFsn);
    print("_______________checkQrData_______________________");
    print(data);
    try {
      for (int i = 0; i < data.length; i++) {
        if (data[i]["IF_FLG"] != "1") {
          Common.showTost("错误信息:" +
              data[i]["ERR_MESSAGE"] +
              "所在行:" +
              data[i]["BATCH_ROW_ID"]);
          return;
        }
      }
      isCheckVoid = true;
      Common.showTost("检查通过");
    } catch (err) {
      Common.showTost(err.toString());
    }

    print("______________________");
    print(data);
  }

  // 扫描完毕插入数据
  void setScanDone() async {
    var data = await ApiService.sanDone(iFsn, GlobalData.vendorID);
    print("___________扫描完毕返回___________");
    print(data);

    // 成功跳转详情页面
    if (data.indexOf('1:成功') > -1) {
      Navigator.of(context).push(
        MaterialPageRoute(
          builder: (context) {
            return QrList(
              batchNumbe: iFsn,
            );
          },
        ),
      ).then((value) async => {
            iFsn = await ApiService.getIfsnData(),
            print(iFsn),
            setState(() {
              listData = [];
            })
          });
    } else {
      Common.showTost(data);
    }
  }

  // alert
  alertDialog(String content, [String title = "提示信息！"]) {
    showDialog(
        context: context,
        builder: (context) {
          return AlertDialog(
            title: Text(title),
            content: Text(content),
            actions: <Widget>[
              TextButton(
                onPressed: () {
                  Navigator.pop(context);
                },
                child: Text("取消"),
              ),
              TextButton(
                onPressed: () {
                  Navigator.pop(context);
                  delData();
                },
                child: Text("确定"),
              )
            ],
          );
        });
  }

  @override
  Widget build(BuildContext context) {
    // final ButtonStyle buttonStyle = Common.buttonStyle;
    // TextStyle buttonTextStyle = Common.buttonTextStyle;

    return Scaffold(
      appBar: AppBar(
        title: Text('二维码单独赋码'),
        centerTitle: true,
        backgroundColor: Color(Common.muji),
        leading: IconButton(
          tooltip: '返回',
          icon: const Icon(Icons.arrow_back),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
      ),
      body: Column(
        // mainAxisAlignment: MainAxisAlignment.start,
        children: [
          Container(
            height: 30,
            child: Row(
              // textBaseline: TextBaseline.ideographic,
              // mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Expanded(
                  flex: 1,
                  child: Container(),
                ),
                Expanded(
                  flex: 6,
                  child: Container(
                    padding: EdgeInsets.fromLTRB(16, 0, 0, 0),
                    height: 20,
                    width: 175,
                    // color: Colors.amber,
                    // decoration: sty(

                    // ),
                    child: Text("二维码", style: listHadeSize),
                    // Text(
                    //   "[...请扫描...]",
                    //   style: TextStyle(fontSize: 13),
                    // ),
                  ),
                ),
                Expanded(
                  flex: 4,
                  child: Container(
                    child: Container(
                      height: 20,
                      width: 175,
                      child: Text("商品条码", style: listHadeSize),
                    ),
                  ),
                ),
                SizedBox(width: 10),
              ],
            ),
          ),
          // Container(
          //   height: 25,
          //   child: Column(
          //     mainAxisAlignment: MainAxisAlignment.center,
          //     children: [
          //       Row(
          //         mainAxisAlignment: MainAxisAlignment.start,
          //         children: [
          //           SizedBox(width: 46),
          //           Container(
          //             width: itemWidth,
          //             // margin: EdgeInsets.only(
          //             // top: 100.0,
          //             // right: 100.0,
          //             //     ),
          //             child: Text(
          //               "二维码",
          //               style: TextStyle(fontSize: 10),
          //             ),
          //           ),
          //           SizedBox(width: 35),
          //           Container(
          //             width: 100,
          //             child: Text(
          //               "商品条码",
          //               style: TextStyle(fontSize: 10),
          //             ),
          //           ),
          //         ],
          //       ),
          //     ],
          //   ),
          // ),
          // Expanded(
          //   child: Container(
          //     child: Column(
          //       mainAxisAlignment: MainAxisAlignment.center,
          //       children: [
          //         Row(
          //           mainAxisAlignment: MainAxisAlignment.start,
          //           children: [
          //             SizedBox(width: 40),
          //             Container(
          //               width: itemWidth,
          //               // margin: EdgeInsets.only(
          //               // top: 100.0,
          //               // right: 100.0,
          //               //     ),
          //               child: Text(
          //                 "二维码",
          //               ),
          //             ),
          //             SizedBox(width: 80),
          //             Container(
          //               width: itemWidth,
          //               child: Text(
          //                 "商品条码",
          //               ),
          //             ),
          //           ],
          //         ),
          //       ],
          //     ),
          //   ),
          // ),
          Expanded(
            flex: 6,
            child: ListView(
              controller: _scrollController,
              children: this._getListData(),
            ),
          ),
          // Container(
          //   height: 30,
          //   child: Row(
          //     // textBaseline: TextBaseline.ideographic,
          //     // mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          //     mainAxisAlignment: MainAxisAlignment.center,
          //     children: [
          //       SizedBox(
          //         width: 10,
          //       ),
          //       Container(
          //         width: 20,
          //         child: Checkbox(
          //           value: _allCheckValue,
          //           onChanged: (value) {
          //             allDataChange(value);
          //             setState(() {
          //               _allCheckValue = value!;
          //             });
          //           },
          //         ),
          //       ),
          //       SizedBox(
          //         width: 5,
          //       ),

          //       Expanded(
          //         flex: 6,
          //         child: Container(
          //           // decoration: BoxDecoration(
          //           //   border: Border(
          //           //     bottom: BorderSide(width: 0.3, color: Colors.black),
          //           //   ),
          //           // ),
          //           child: Row(
          //             children: [
          //               Text(
          //                 "全选",
          //                 style: TextStyle(fontSize: 12),
          //               ),
          //             ],
          //           ),
          //         ),
          //       ),

          //       SizedBox(width: 40),
          //       // Text("______"),
          //       // Text(this.listData[i]["goodsCode"]),
          //     ],
          //   ),
          // ),
          // Expanded(
          //   flex: 1,
          //   child: Column(
          //     children: [
          //       Row(
          //         mainAxisAlignment: MainAxisAlignment.center,
          //         children: [
          //           // Checkbox(
          //           //   value: false,
          //           //   onChanged: (value) {
          //           //     // setState(() {
          //           //     //   this.listData[i]["isChecked"] = value;
          //           //     // });
          //           //   },
          //           // ),
          //           // SizedBox(width: -10),
          //           Container(
          //             width: 100,
          //             child: TextButton(
          //               style: _buttonStyle,
          //               child: Text("请扫描商品二维码", style: _buttonTextStyle),
          //               onPressed: addQRcodeData,
          //             ),
          //           ),

          //           SizedBox(width: 30),
          //           Container(
          //             width: 100,
          //             child: TextButton(
          //               style: _buttonStyle,
          //               child: Text(
          //                 "请扫描商品条码",
          //                 style: _buttonTextStyle,
          //               ),
          //               onPressed: addGoodscodeData,
          //             ),
          //           ),
          //         ],
          //       )
          //     ],
          //   ),
          // ),
          Expanded(
            flex: 1,
            child: Column(
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    // Checkbox(
                    //   value: false,
                    //   onChanged: (value) {
                    //     // setState(() {
                    //     //   this.listData[i]["isChecked"] = value;
                    //     // });
                    //   },
                    // ),
                    // SizedBox(height: 300),
                    Container(
                      width: 100,
                      child: TextButton(
                        style: _buttonStyle,
                        child: Text("删除", style: _buttonTextStyle),
                        onPressed: () {
                          alertDialog("确定要删除吗?");
                          // showDialog(
                          //     context: context,
                          //     builder: (context) {
                          //       return MyDialog();
                          //     });
                        },
                      ),
                    ),

                    SizedBox(width: 10),
                    // Container(
                    //   width: 100,
                    //   child: TextButton(
                    //     style: _buttonStyle,
                    //     child: Text(
                    //       "检查空白/异常",
                    //       style: _buttonTextStyle,
                    //     ),
                    //     onPressed: () {},
                    //   ),
                    // ),
                    SizedBox(width: 10),

                    Container(
                      width: 100,
                      child: TextButton(
                        style: _buttonStyle,
                        child: Text(
                          "扫描完毕",
                          style: _buttonTextStyle,
                        ),
                        onPressed: () => {
                          // if (isCheckVoid)
                          //   {
                          setScanDone(),
                          //   }
                          // else
                          //   {Common.showTost("请先检查空白异常")}
                        },
                      ),
                    ),
                  ],
                )
              ],
            ),
          ),
        ],
      ),
    );
  }
}
